﻿#ifndef BASEMODULE_GLOBALHELPER_H
#define BASEMODULE_GLOBALHELPER_H

#include <QString>
#include <QMultiHash>
#include <QPair>
#include <QSharedPointer>
#include <QList>
#include <QStringList>
#include <QIODevice>
#include <QFileInfoList>
#include "API_BaseModule.h"

class QProcess;

#define GlobalHelperInstance BaseModule::GlobalHelper::getInstance()

namespace BaseModule
{
    class API_BASEMODULE GlobalHelper : QObject
    {
    public:
        static GlobalHelper* getInstance()
        {
            static GlobalHelper m_instance;
            return &m_instance;
        }

        /// @brief 获取时间戳
        /// @return 
        qint64 getTimestamp();

        /// @brief 获取时间戳字符串
        /// @return 
        QString getTimestampString();

        /// @brief 发送消息到父进程
        void sendMsgToParentProcess(QString msg);

        /// @brief 字符串转宽字符串
        /// @param data 
        /// @return 
        std::wstring stringToWString(const std::string data);

        /// @brief 通过名称获取进程id
        qint64 getProcessIdByName(std::string processName);

        /// @brief 通过进程id关闭进程
        /// @param processId 
        void closeProcessByProcessId(qint64 processId);


        /// @brief 以只读的方式读取文件
        /// @param filePath 文件路径
        /// @param jsonString 文件中的内容
        /// @return true-成功，false-失败
        bool readFile(QString filePath, QByteArray& jsonString);

        /// @brief 以覆盖的方式写入文件
        /// @param filePath 文件路径
        /// @param jsonString 需要写入的内容
        /// @param openModel 文件的打开模式
        /// @return true-成功，false-失败
        bool writeFile(QString filePath, QByteArray jsonString, QIODevice::OpenMode openModel = QIODevice::WriteOnly | QIODevice::Truncate);

        /// @brief 初始化项目临时目录
        void GlobalHelper::initProjectTempDir();

        /// @brief 获取项目历史目录（存放项目文件）
        QString getProjectTempIODir();

        /// @brief 判断名字是否合法，不含特殊字符、不是空的、长度适合
        /// @param name 名字
        /// @return 是否合法
        bool isLegalName(QString& name);

    private:      
        // @brief 创建临时目录
        /// @return 创建结果
        bool createTempDir();

    private:
        /// @brief EMDA的安装目录
        QString m_installDir;
        /// @brief 临时目录
        QString m_tempIODir;
    };
}
#endif // GLOBALHELPER_H
